package com.agileboot.attendance.domain.order.model;

import com.agileboot.attendance.domain.order.command.AddOrderPersonnelCommand;
import com.agileboot.attendance.domain.order.entity.AttOrderPersonnelEntity;
import com.agileboot.attendance.domain.personnel.db.AttPersonnelEntity;
import com.agileboot.common.exception.ApiException;
import com.agileboot.common.exception.error.ErrorCode;
import lombok.Data;
import org.springframework.beans.BeanUtils;

/**
 * 订单人员关联模型
 *
 * @author agileboot
 */
@Data
public class OrderPersonnelModel {

    /**
     * 订单人员关联实体
     */
    private AttOrderPersonnelEntity entity;
    
    /**
     * 人员实体
     */
    private AttPersonnelEntity personnelEntity;
    
    /**
     * 从命令创建模型
     *
     * @param command 添加命令
     * @return 模型对象
     */
    public static OrderPersonnelModel fromCommand(AddOrderPersonnelCommand command) {
        OrderPersonnelModel model = new OrderPersonnelModel();
        AttOrderPersonnelEntity entity = new AttOrderPersonnelEntity();
        
        // 复制属性
        BeanUtils.copyProperties(command, entity);
        
        // 设置默认状态为正常
        entity.setStatus("0");
        
        model.setEntity(entity);
        return model;
    }
    
    /**
     * 从实体创建模型
     *
     * @param entity 实体对象
     * @return 模型对象
     */
    public static OrderPersonnelModel fromEntity(AttOrderPersonnelEntity entity) {
        OrderPersonnelModel model = new OrderPersonnelModel();
        model.setEntity(entity);
        return model;
    }
    
    /**
     * 检查关联唯一性
     *
     * @param orderPersonnelService 订单人员关联服务
     */
    public void checkUnique(com.agileboot.attendance.domain.order.db.AttOrderPersonnelService orderPersonnelService) {
        if (orderPersonnelService.checkOrderPersonnelExists(entity.getOrderId(), entity.getPersonnelId())) {
            throw new ApiException(ErrorCode.Business.COMMON_OBJECT_EXISTED, entity.getPersonnelId(), "订单人员关联");
        }
    }
} 